package com.titan.core.utils.dbinfo.dialect;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

import com.titan.core.utils.object.TableColumnDescriptor;
import com.titan.core.utils.object.TableDescriptor;

/**
 * @author 周成功
 * @email 86898837@qq.com
 * @date 2020年02月14日
 */
public interface IDBDialect {
    /**
     * @return 数据库JDBC驱动
     */
    public String getDriverName();
    
    /**
     * @return 当前数据库的链接用URL
     */
    public String getUrl(String ip, int port, String serviceName);
    
    /**
     * @return 当前数据库的链接
     */
    public Connection getConnection(String ip, int port, String serviceName, String userid, String password) throws SQLException;
    public Connection getConnection(String url, String userid, String password) throws SQLException;
    
    /**
     * @return 当前数据库的表或者字段识别符
     */
    public String identifier(String key);
    
    /**
     * @return 获得数据库日期时间的方法字符串
     */
    public String sqlSysdate();
    
    /**
     * 拼接分页SQL
     * @param sql
     * @param pageIndex 当前页号，从1开始。
     * @param pageSize 每页记录数
     */
    public void sqlPage(StringBuilder sql, int pageIndex, int pageSize);
    
    /**
     * 获得所有数据库表
     */
    public List<String> getTables(Connection conn, String schema) throws Exception;
    
    /**
     * 获得列信息
     *
     * @param conn
     * @param tablename
     * @return {列英文名, 数据类型, 数据长度, 数值指定长度(整数+小数), 数值小数部分长度, 是否可以为null(Y/N), 列注释}
     */
    public TableColumnDescriptor[] getColumn(Connection conn, String schema, String tablename) throws Exception;

    /**
     * 获得表信息
     *
     * @param conn
     * @param tablename
     * @return {表类型, 表注释}
     */
    public TableDescriptor getTable(Connection conn, String schema, String tablename) throws Exception;
    
    /**
     * 获得表的主键
     *
     * @param conn
     * @param tablename
     * @return
     */
    public String[] getPrimaryKey(Connection conn, String schema, String tablename) throws Exception;
    
    
    /**
     * 获得表的唯一索引
     *
     * @param conn
     * @param tablename
     * @return
     */
    public String[][] getUniqueIndex(Connection conn, String schema, String tablename) throws Exception;    
}
